Argo CDのApplication Setで複数Applicationを作成してみる
「ArgoCDで複数のクラスターに同じApplicationをデプロイしたいな」
こんな時にはApplication Setが便利です。
概要と試してみたことをブログにします。
Application Setとは
Argo CDのApplication Setは、同じ構成を持つ複数のApplicationを自動的に展開するためのカスタムコントローラーです。
同一の構成のApplicationを複数のClusterに展開したいことがあると思います。 (例えば、DEV/STG/PRDのように環境ごとにや、Saasを提供していて利用者ごとにKubernetes Clusterを用意するなど)
Application Setを使用することで記述量を抑えつつ、同一構成の複数のApplicationを設定することができます。
- Introduction - Argo CD - Declarative GitOps CD for Kubernetes
- Use Cases - Argo CD - Declarative GitOps CD for Kubernetes
デプロイ先のクラスターだけ変えて、他の設定は同じApplicationをデプロイする場合を例に具体的な設定を見てましょう。
Application Setを使わない場合
通常であれば、以下のように1つ1つArgo CDのApplicationを定義する必要があります。
今回はApplicationのnameとデプロイ先のClusterのみを変えて、app1とapp2を設定します。
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: app1-guestbook spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: server: https://1.2.3.4 namespace: guestbook
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: app2-guestbook spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: server: https://2.4.6.8 namespace: guestbook
Applicationの数だけファイルが増えるため、数が多くなると運用が大変そうです。
Application Setを使う場合
Application Setを使えば、以下のように記述をシンプルにできます。
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: guestbook spec: generators: - list: elements: - cluster: app1 url: https://1.2.3.4 - cluster: app2 url: https://2.4.6.8 template: metadata: name: '{{cluster}}-guestbook' spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: server: '{{url}}' namespace: guestbook
templateを定義して、Applicationごとに変更したい部分をパラメータ化することが可能です。
Application Setを使わない場合と比べて、重複箇所がかなり減ったことがわかります。
generators
の部分ですが、上記ではList generator
(静的にリストを定義)を使用しました。
他にも定義できるgenerator
は色々あります。
例えば、Cluster generator
はArgo CD内で管理されているクラスターのリストに基づいてパラメータを作成することができます。
詳細は以下の公式ドキュメントをご確認ください。
Generators - Argo CD - Declarative GitOps CD for Kubernetes
やってみた
ローカルのkind上にArgo CDをインストール
以下の手順で、kind上にArgo CDをインストールします。
Argo CDへのログインの確認までを行います。
CLIでもログインしておきます。
argocd login localhost:8080
Application Setの用意・デプロイ
Argo CD v2.3 以降、ApplicationSet コントローラーは Argo CD にバンドルされています。 (現時点では、v2.6.7)
そのため、ApplicationSet コントローラーを個別にインストールする必要はありません。
以下のファイルを用意します。
本来ならurlの部分を別のClusterのurlに変更したいところですが、ローカルで試す関係でArgo CD用のクラスターを指定しています。
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: guestbook spec: generators: - list: elements: - cluster: app1 url: https://kubernetes.default.svc - cluster: app2 url: https://kubernetes.default.svc template: metadata: name: '{{cluster}}-guestbook' spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: server: '{{url}}' namespace: default
以下のコマンドでApplication Setを作成すると、2つのApplicationが作成されることを確認できます。
$ argocd appset create application-set.yaml
もし上記で上手くいかない場合は、argocd-applicationset-controller
のログをご確認ください。
$ kubectl logs -f -l app.kubernetes.io/name=argocd-applicationset-controller -c argocd-applicationset-controller -n <argocd namespace>
おわりに
ArgoCD Application Setについてでした。
簡単に同一構成のApplicationを作成することができました。
Argo CD v2.3 以降はArgo CDにバンドルされているため、すぐに使うことができます。 同一Applicationを複数のクラスターにデプロイしたい場合に便利かと思います。ぜひ試してみてください。
以上、AWS事業本部の佐藤(@chari7311)でした。